package com.zp.self.module.level_4_算法练习.算法.位图;
import org.junit.Test;

/**
 * @author By ZengPeng
 */
public class 力扣_997_找到小镇的法官 {
    @Test
    public void main() {
        
        Solution solution = new 力扣_997_找到小镇的法官().new Solution();
        System.out.println(solution);
    }

    /**
     题目：小镇里有 n 个人，按从 1 到 n 的顺序编号。传言称，这些人中有一个暗地里是小镇法官。
         如果小镇法官真的存在，那么：
         小镇法官不会信任任何人。
         每个人（除了小镇法官）都信任这位小镇法官。
         只有一个人同时满足属性 1 和属性 2 。
         给你一个数组 trust ，其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。
         如果小镇法官存在并且可以确定他的身份，请返回该法官的编号；否则，返回 -1 。

     示例 1：
     输入：n = 2, trust = [[1,2]]
     输出：2

     示例 2：
     输入：n = 3, trust = [[1,3],[2,3]]
     输出：3

     示例 3：
     输入：n = 3, trust = [[1,3],[2,3],[3,1]]
     输出：-1


     分析：【P 💖💖】
        1.位图：记录每个人被信任的次数，记录每个人是否信任别人
            --执行耗时:2 ms,击败了98.07% 的Java用户
            --编码耗时:[11:59]

     边界值 & 注意点：
        1.
     **/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int findJudge(int n, int[][] trust) {
        int[] bit = new int[n+1];
        boolean[] bit2 = new boolean[n+1];
        for (int[] ints : trust){
            bit[ints[1]]++;
            bit2[ints[0]]=true;
        }
        int res=0;
        for (int i = 1; i < bit.length; i++) {
            if(bit[i]==n-1 && !bit2[i]){
                if(res!=0)
                    return -1;
                res = i;
            }
        }
        return res==0?-1:res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}